<?php
namespace app\common;

use Firebase\JWT\JWT;
use Firebase\JWT\Key;

class Token
{
    // 生成Token
    public static function generate(array $payload, int $expire = 7200): string
    {
        $payload = array_merge($payload, [
            "iss" => 'peiwan', // 签发者
            "iat" => time(), // 签发时间
            "nbf" => time(), // 生效时间（立即生效）
            "exp" => time() + $expire, // 过期时间（默认2小时）
        ]);
        $key = env('JWT_SECRET');
        return JWT::encode($payload, $key, 'HS256');
    }

    // 验证Token
    public static function verify(string $token): array
    {
        try {
            $key = env('JWT_SECRET');
            $decoded = JWT::decode($token, new Key($key, 'HS256'));
            return (array) $decoded;
        } catch (\Firebase\JWT\ExpiredException $e) {
            throw new \app\common\BusinessException("Token过期");
        } catch (\Exception $e) { // 捕获过期、签名无效等异常
            throw new \app\common\BusinessException("Token签名无效");
        }
    }
}
